package cn.xxy.datasource;

import org.apache.commons.dbcp2.BasicDataSource;
import cn.xxy.beans.DataSourceConfig;

import javax.sql.DataSource;
import java.util.Map;

public class DbcpDataSourceAdapter extends DataSourceAdapter {
    private BasicDataSource ds;
    @Override
    protected DataSource adapter(DataSourceConfig config) {
        ds = new BasicDataSource();
        ds.setUsername(config.getUsername());
        ds.setPassword(config.getPassword());
        ds.setDriverClassName(config.getDriverClass());
        ds.setUrl(config.getJdbcUrl());

        initAdapter();
        injectProperty(ds, config);
        return ds;
    }

    @Override
    protected DataSource adapter(Map<String, String> config) {
        ds = new BasicDataSource();
        initAdapter();
        injectProperty(ds, config);
        return ds;
    }
    protected void initAdapter() {
        if (ds != null) return;

        //对象连接池中的常见配置项，以下的四个配置可以不配置(因为有默认配置)，但是上面的四个是必须要配置的！
        ds.setInitialSize(15);            //指定初始化的连接数
        ds.setMaxTotal(100);                  //指定最大链接数量
        ds.setMaxIdle(50);                    //指定最大空闲数
        ds.setMinIdle(10);               //指定最小空闲数
        ds.setMaxWaitMillis(10000);
    }
    /**
     * finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
     *
     * @throws Throwable
     */
    protected void finalize() throws Throwable {
        if (ds != null) {
            ds.close();
        }
        super.finalize();
    }
}